package cn.hinglo.common.util;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * @author HingLo
 * @createTime: 2019/6/13 9:55
 * @description: 全局的配置文件加载
 */
@Slf4j
public class PropertiesKit {

    /***
     * 默认配置文件的名称
     */
    private static final String DEFAULT_NAME = "DEFAULT_NAME";
    /***
     * 默认配置文件
     */
    private static final String DEFAULT_FILE = "application.properties";

    /***
     * 配置文件Map,管理多个配置文件
     */
    private static final Map<String, Prop> PROP_MAP = new HashMap<>();

    static {
        PROP_MAP.put(DEFAULT_NAME, PropKit.use(DEFAULT_FILE));
    }


    /***
     * 返回默认的配置文件
     * @return 返回属性对象
     */
    public static Prop getProp() {
        return PROP_MAP.get(DEFAULT_NAME);
    }

    /***
     * 指定配置文件
     * @param name 文件名称
     * @return 返回配置文件对象
     */
    public static Prop getProp(String name) {
        if (!PROP_MAP.containsKey(name)) {
            PROP_MAP.put(name, PropKit.use(name));
        }
        return PROP_MAP.get(name);
    }

    /***
     * 返回指定的key的值
     * @param key key
     * @param defaultValue 默认值
     * @return 返回结果
     */
    public static String get(String key, String defaultValue) {
        return PROP_MAP.get(DEFAULT_NAME).get(key, defaultValue);
    }

    /***
     * 返回指定key的值
     * @param key key
     * @return 返回字符串
     */
    public static String get(String key) {
        return PROP_MAP.get(DEFAULT_NAME).get(key);
    }

    /***
     *
     * @param key key
     * @return 返回结果
     */
    public static Integer getToInt(String key) {
        String value = get(key);
        if (StrUtil.isBlank(value)) {
            return null;
        }
        return Convert.toInt(value);
    }

    /***
     *
     * @param key key
     * @return 返回结果
     */
    public static Integer getToInt(String key, Integer defaultValue) {
        String value = get(key);
        if (StrUtil.isBlank(value)) {
            return defaultValue;
        }
        return Convert.toInt(value);
    }

    /***
     * 返回字符串数组
     * @param key key
     * @return 返回结果
     */
    public static String[] getToStringArray(String key) {
        String value = get(key);
        if (StrUtil.isBlank(value)) {
            return null;
        }
        return value.split(",");
    }

    /***
     * 转为boolean
     * @param key key
     * @return 返回结果
     */
    public static Boolean getToBool(String key) {
        String value = get(key);
        if (StrUtil.isBlank(value)) {
            return false;
        }
        return Boolean.valueOf(value);
    }

    /***
     * 转为boolean
     * @param key key
     * @return 返回结果
     */
    public static Boolean getToBool(String key, Boolean defaultValue) {
        String value = get(key);
        if (StrUtil.isBlank(value)) {
            return true;
        }
        return Boolean.valueOf(value);
    }


}
